查看原文
其他

掌握数据处理精髓的起手式:长数据框与宽数据框之间的完美转变!

游南 游北向难 2024-03-30


掌握数据处理精髓的起手式:长数据框与宽数据框之间的完美转变!

介绍

本文介绍了三种实现长数据框与宽数据框之间的转变的方法。即实现二维数据与一维数据间的来回切换。

分别为reshape2包的melt()和dcast()函数;tidyr包的gather()和spread()函数;tidyr包的pivot_longer()和pivot_wider()函数


示意图

正文部分

数据构建

## R数据处理基础-表格的变换(长数据框与宽数据框间的转变)
## Time: 20240319
## Author: xiaohe
## Notes: zhenzhen

## 数据构建
data<-data.frame(No=c("Sample_1","Sample_2","Sample_3","Sample_4"),
                 Yesterday=c(1,3,5,7),
                 Today=c(2,4,6,8),
                 Tomorrow=c("a","b","c","d"))
数据预览(宽数据款)

宽数据框转变为长数据框

## 宽数据框转化为长数据框
# method 1: melt(reshape2包)
data_melt<-reshape2::melt(data = data,id.vars="No",variable.name="Time",value.name = "Value")

# method 2: gather(tidyr包)
data_gather<- tidyr::gather(data,Time,Value,-No)

# method 3: pivot_longer(tidyr包) 该方法需要所有的Value都为同一类型,而我的Value中存在abcd字符,故需要多一步数据转换
data_1<-dplyr::mutate_all(data,as.character) # 将数据框所有数据转化为字符型
data_longer<-tidyr::pivot_longer(data_1,cols=-No,names_to = "Time",values_to = "Value")
# 注意该方法可能会将第一列进行系统默认排序
长数据框

长数据框转变为宽数据框

## 长数据框转化为宽数据框
# method 1: dcast(reshape2包)
data_dcast<-reshape2::dcast(data_melt,No~Time,value.var="Value")

# method 2: spread(tidyr包)
data_spread<-tidyr::spread(data_gather,Time,Value)

# method 3: pivot_wider(tidyr包)
data_wider<-tidyr::pivot_wider(data_longer,names_from = Time,values_from = Value)
宽数据框

备注

大家有兴趣可加群,欢迎交流学习,共同进步!

若群链接失效,可在本公众号内的对话框回复关键词R语言学习交流群

直接扫码进群
欢迎扫码添加本人

若您觉得本文有帮助,帮忙点击点赞在看是对我最大的鼓励和支持!


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存